#ifndef FHE_CORE_INODEINTERFACE_H
#define FHE_CORE_INODEINTERFACE_H

#include <fhe/core/IFuncDesc.h>
#include <fhe/core/IVarDesc.h>

namespace fhe
{
  namespace core
  {
    class FHE_API INodeInterface : public boost::noncopyable
    {
    public:
      typedef boost::shared_ptr< INodeInterface > Ptr;
      INodeInterface() {}
      virtual ~INodeInterface() {}
      virtual std::string module() const = 0;
      virtual std::string name() const = 0;
      virtual void addFunc( const IFuncDesc::Ptr& func ) = 0;
      virtual void addVar( const IVarDesc::Ptr& var ) = 0;
      virtual void build( Node* node ) = 0;
    };
  }
}

#endif
